package ksv.cron.v1.impl;

import ksv.cron.bean.SysCron;
import ksv.cron.v1.CronContainer;
import ksv.cron.v1.ICron;

import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.DelayQueue;

/**
 * @创建人 wsdc
 * @时间 2021/1/31
 * @描述 $
 */
public class DefaultCronContainer implements CronContainer {
    private Map<Serializable,SysCron> cronMap = new ConcurrentHashMap<>();
    private DelayQueue<ICron> queue = new DelayQueue<>();

    @Override
    public void add(SysCron cron) {
        if(cronMap.putIfAbsent(cron.getId(),cron) == null){
            ICron iCron = new DefaultICronImpl(cron);
            queue.offer(iCron);
        }
    }

    @Override
    public void batchAdd(List<SysCron> cronList) {
        for (SysCron sysCron : cronList) {
            add(sysCron);
        }
    }

    @Override
    public List<SysCron> list() {
        List<SysCron> list = new LinkedList<>();
        list.addAll(cronMap.values());
        return list;
    }

    @Override
    public SysCron get(Serializable id) {
        return cronMap.get(id);
    }

    @Override
    public SysCron remove(Serializable id) {
        return cronMap.remove(id);
    }

    @Override
    public DelayQueue<ICron> queue() {
        return queue;
    }
}
